#include <iostream>
#include <algorithm>
#include <list>
template <class In> struct Iseq: public std::pair<In, In>
{
    Iseq(In i1, In i2):std::pair<In, In>(i1, i2){
    }
};
template<class C> Iseq<typename C::iterator_type> iseq(C& c)
{
    return Iseq<typename C::iterator_type>(c.begin(), c.end());
}

template <class In, class T>In myfind(Iseq<In> r, const T& v)
{
    return std::find(r.first, r.second, v);
}
int main()
{
    std::list<std::string> names;
    names.push_back("Zhu");
    names.push_back("Wu");
    names.push_back("Wang");
    std::cout<< myfind(iseq(names), "Wang");
}
